/*-------------------------------------------------------------------------
 *
 * multi_server_executor.h
 *	  Type and function declarations for executing remote jobs from a backend;
 *	  the ensemble of these jobs form the distributed execution plan.
 *
 * Copyright (c) Citus Data, Inc.
 *
 * $Id$
 *
 *-------------------------------------------------------------------------
 */

#ifndef MULTI_SERVER_EXECUTOR_H
#define MULTI_SERVER_EXECUTOR_H

#include "distributed/multi_physical_planner.h"
#include "distributed/worker_manager.h"

/* Adaptive executor repartitioning related defines */
#define WORKER_CREATE_SCHEMA_QUERY "SELECT worker_create_schema (" UINT64_FORMAT ", %s);"
#define WORKER_REPARTITION_CLEANUP_QUERY \
    "SELECT worker_repartition_cleanup (" UINT64_FORMAT ");"

/* Enumeration that represents distributed executor types */
typedef enum {
    MULTI_EXECUTOR_INVALID_FIRST = 0,
    MULTI_EXECUTOR_ADAPTIVE = 1,
    MULTI_EXECUTOR_NON_PUSHABLE_INSERT_SELECT = 2,
    MULTI_EXECUTOR_NON_PUSHABLE_MERGE_QUERY = 3
} MultiExecutorType;

/* Function declarations common to more than one executor */
extern MultiExecutorType JobExecutorType(DistributedPlan* distributedPlan);

#endif /* MULTI_SERVER_EXECUTOR_H */
